﻿#pragma once
#include "ADFGlobal.h"
#include "AsGlobalData.h"
#include "AsMetaType.h"
#include "AsJsonObject.h"

class ADF_EXPORT AsRoamingData : public AsGlobalData
{
public:
	AsRoamingData();
	~AsRoamingData();

	void save();										//	保存
	void setSaveInterval(int interval);					//	设置保存间隔

	virtual void timerEvent(QTimerEvent* e);			//	定时器事件
private:
	QJsonObject				m_json;
	int						m_saveInterval;				//	自动保存间隔,默认30s，单位ms
	int						m_iSaveTimer;				//	保存定时器
	static QString	m_qsFilePath;						//	配置文件路径

private:
	void load();		// 加载

public:
	/**
	 * @desc 获取AsJsonObject对象,pObj内存需要用户先申请好
	 * @param
	 */
	bool getAsValue(QString key, AsJsonObject* pObj);
	void setAsValue(QString key, AsJsonObject* pObj);
	//设置缓存文件的路径，必须在initGlobalDataPool之前调用
	static void setFilePath(QString filePath);

public:
	/**
	 * @desc 设置缓存值
	 * @param
	 *	-TYPE:值类型模板
	 *	-key:缓存值键名
	 */
	template<typename TYPE>
	void setValue(QString key, const TYPE& value)
	{
		QVariant v;
		v.setValue(value);
		m_json[key] = QJsonValue::fromVariant(v);
	}
	template<typename TYPE>
	TYPE getValue(QString key)
	{
		if (!m_json.contains(key))
		{
			qDebug() << "Temp key:" + key + " is not exist";
			return TYPE();
		}

		return m_json[key].toVariant().value<TYPE>();
	}

};

AS_DECLARE_META_TYPE(AsRoamingData)

